home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / MRAC / Generate / g-proportion < prev    next >
Lisp/Scheme  |  1998-10-24  |  5KB  |  152 lines

  1. g-proportion type start-symbol inst-range operator per-cent1 per-cent2 pattern
  2.  
  3. This function lies somewhere between existing SCOM primitives <symbol-scale> and <symbol-compress>. It has the added attraction of enabling symbol lists or interval series to be used as source material for the generation of new material 'in proportion' to the source. The function parameters allow for a wide range of possibilities:
  4.  
  5. type - nil = list or sublist
  6. type - :list :constant :consecutive = sublist
  7. start-symbol = nil, integer, symbol, pitch, list
  8. inst-range = low high (symbol, integer, pitch), or instrument-name
  9. operator = >, <, <>, ><
  10. per-cent = integer1 integer2
  11. pattern = symbols, intervals
  12.  
  13. TYPE:
  14.  
  15. exp. nil 
  16. (  .   .   .   .   .   .   .   .   .  )  ; symbols
  17. ( 50  38  25  12  0  -12  -25 -38 -50 )  ; '> 50 -50
  18.  
  19. exp. nil
  20. ((  .   .   .  ) (  .   .   .  ) (  .   .   .  ))  ; symbols
  21. (  50  38  25      12  0  -12      -25 -38 -50  )  ; '> 50 -50
  22.  
  23. exp. nil 
  24. (  .   .   .   .   .   .   .   .   .  )  ; symbols
  25. (  35  35  35  35  35  35  35  35  35 )  ; '> 35 35
  26.  
  27. exp. :list
  28. ((  .   .   .  ) (  .   .   .  ) (  .   .   .  ))  ; symbols
  29. ((  50  50  50 ) (  0   0   0  ) ( -50 -50 -50 ))  ; '> 50 -50
  30.  
  31. exp. :constant
  32. ((  .   .   .  ) (  .   .   .  ) (  .   .   .  ))  ; symbols
  33. ((  50  0  -50 ) (  50  0  -50 ) (  50  0  -50 ))  ; '> 50 -50
  34.  
  35. exp. :consecutive
  36. ((  .   .   .  ) (  .   .   .  ) (  .   .   .  ))  ; symbols
  37. ((  50  38  25 ) (  12  0  -12 ) ( -25 -38 -50 ))  ; '> 50 -50
  38.  
  39. The scope of this particular function  is best described through a series of examples, as below.
  40.  
  41. INTERVAL:
  42.  
  43. (setq op.31-Var-für-Orch '(1 7 9 6 8 0 5 4 10 11 2 3))
  44. (setq interval-list (get-interval :all op.31-Var-für-Orch))
  45. => (6 2 -3 2 -8 5 -1 6 1 -9 1)
  46.  
  47. (g-proportion nil 1 -5 45 '> 50 -50 interval-list)
  48. => (b k n k n f k k p q l l)
  49.  
  50. (g-proportion nil 1 -5 45 '> 50 50 interval-list)
  51. => (b k n i l -b g e n o a b)
  52.  
  53. (g-proportion nil 'c#4 'viola '<> -30 70 interval-list)
  54. => (b g i f i -e e d m o f g)
  55.  
  56. (setq interval-rotate (rotate-fc 2 interval-list))
  57. => ((6 2 -3 2 -8 5 -1 6 1 -9 1)
  58.     (2 -3 2 -8 5 -1 6 1 -9 1 6)
  59.     (-3 2 -8 5 -1 6 1 -9 1 6 2))
  60.  
  61. (setq interval-lists (g-chord .25 1 2 0 0 interval-rotate))
  62. => (((6 2) -3 (2 -8) (5 -1) 6 (1 -9) 1)
  63.     (2 -3 (2 -8) (5 -1) 6 (1 -9) (1 6))
  64.     (-3 2 -8 (5 -1) (6 1) -9 (1 6) 2))
  65.  
  66. (g-proportion nil 1 -5 45 '<> -45 70 interval-lists)
  67. => ((b fh f hb gg n pf h)
  68.     (k g j-d gf q se gp)
  69.     (l o f lk qr k lq s))
  70.  
  71. (g-proportion :list 1 -5 45 '<> -45 70 interval-lists)
  72. => ((b fh g ie hh l mi j)
  73.     (n i m-b hg r te gr)
  74.     (m q d lk vx i kv z))
  75.  
  76. (g-proportion :constant 1 -5 45 '<> -45 70 interval-lists)
  77. => ((b fh e h-e ed m of g)
  78.     (i g ja ih s uj lq)
  79.     (p r j qp [] p ry [))
  80.  
  81. (g-proportion :consecutive 1 -5 45 '<> -45 70 interval-lists)
  82. => ((b fh f hb gg n pf h)
  83.     (k g j-d gf q se gp)
  84.     (l o f lk qr k lq s))
  85.  
  86. (g-proportion :consecutive '(0 1 2) -5 45 '<> -45 70 interval-lists)
  87. => ((a eg e ga ff m oe g)
  88.     (b e a dp yx \c \eW |Yb|)
  89.     (c -c b k qp vw p qv x))
  90.  
  91. SYMBOL:
  92.  
  93. (setq op.37-4.StrQu '(5 4 0 1 8 6 7 3 11 10 9 2))
  94. (setq symbol-list
  95.       (i-process 5 'violin
  96.                   (get-interval :all op.37-4.StrQu)))
  97. => (f e a b i g h d l k j c)
  98.  
  99. (g-proportion nil 5 -5 45 '> 50 -50 symbol-list)
  100. => (f d -c a j h i f m m m i)
  101.  
  102. (g-proportion nil 'f -5 45 '> 50 50 symbol-list)
  103. => (f d -d -c i f g a m k i -d)
  104.  
  105. (g-proportion nil 'f4 'viola '<> -30 70 symbol-list)
  106. => (f f c e o l n h t s r l)
  107.  
  108. (setq symbol-rotate (rotate-fc 2 symbol-list))
  109. => ((f e a b i g h d l k j c)
  110.     (e a b i g h d l k j c f)
  111.     (a b i g h d l k j c f e))
  112.  
  113. (setq symbol-lists (g-chord .25 1 2 0 0 symbol-rotate))
  114. => ((fe ab i gh dl k jc)
  115.     (e a b ig hd l kj cf)
  116.     (a b i g hd lk j cf e))
  117.  
  118. (g-proportion nil nil -5 45 '<> -45 70 symbol-lists)
  119. => ((ff de k jk hq p og)
  120.     (j e g qn pj x wv kp)
  121.     (j l u s uq yy y tw w))
  122.  
  123. (g-proportion nil 'd#4 -5 45 '<> -45 70 symbol-lists)
  124. => ((dd bc i hi fo n me)
  125.     (h c e ol nh v ut in)
  126.     (h j s q so ww w ru u))
  127.  
  128. (g-proportion :list nil -5 45 '<> -45 70 symbol-lists)
  129. => ((ff de i hi gl l li)
  130.     (e -c a mj lf t sr gm)
  131.     (a c o l nh vu t io n))
  132.  
  133. (g-proportion :list 0 -5 45 '<> -45 70 symbol-lists)
  134. => ((aa -c-b d cd bg g gd)
  135.     (-b f h tq sm [ zy nt)
  136.     (-f -d j g ic qp o dj i))
  137.  
  138. (g-proportion :constant '0 -5 45 '<> -45 70 symbol-lists)
  139. => ((aa -d-b i gi co n mh)
  140.     (-b -d -c ge ga o nm fi)
  141.     (-f -e c a c-d lk j bf f))
  142.  
  143. (g-proportion :consecutive 0 -5 45 '<> -45 70 symbol-lists)
  144. => ((aa -c-b f ef cl k jb)
  145.     (-b e g ro qk y xw mr)
  146.     (-f -d g e gc kk k fi i))
  147.  
  148. (g-proportion :consecutive '(0 1 2) -5 45 '<> -45 70 symbol-lists)
  149. => ((aa -c-b f ef cl k jb)
  150.     (b -e -c jg ic q po ej)
  151.     (c e n l nj rr r mp p))
  152.